package com.zhuiwei.initialization;

public class OverloadingVarargs {

/**
   * 可以变参数列表
   * 和重载，使重载变的复杂
   * @author zhuiwei
   * @see 《java编程思想 第四版》5.8.1
   */

  static void f(Character... args) {
    System.out.print("first");
    for(Character c : args)
      System.out.print(" " + c);
    System.out.println();
  }

  static void f(Integer... args) {
    System.out.print("second");
    for(Integer i : args)
      System.out.print(" " + i);
    System.out.println();
  }

  static void f(Long... args) {
    System.out.println("third");
  }

  public static void main(String[] args) {
    f('a', 'b', 'c');
    f(1);
    f(2, 1);
    f(0);
    f(0L);
    //! f(); // Won't compile -- ambiguous
  }
}

/*
输出结果:
first a b c
second 1
second 2 1
second 0
third
*/
/**
 * 说明：
 * 如果调用的是f()，程序就无法区分调用哪个方法,
 * 可以通过新增一个非可变参数来解决
 * 参考类：OverloadingVarargs2和OverloadingVarargs3
 */
